package com.yellow.utils;

import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;

import java.io.*;
import java.net.URL;
import java.sql.Date;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;

public class AliyunOSSUtils {
    private static String endpoint;
    private static String accessKeyId;
    private static String accessKeySecret;
    private static String bucketName;

    static {
        //加载prop
        InputStream is = AliyunOSSUtils.class.getClassLoader().getResourceAsStream("aliyun.properties");
        Properties prop = new Properties();
        try {
            prop.load(is);
        } catch (IOException e) {
            e.printStackTrace();
        }
        endpoint = prop.getProperty("endpoint");
        accessKeyId = prop.getProperty("accessKeyId");
        accessKeySecret = prop.getProperty("accessKeySecret");
        bucketName = prop.getProperty("bucketName");
    }

    /**
     * 上传文件到阿里云 返回url
     */
    public static String upload2AliyunOOS(String filePath, String fileName) throws FileNotFoundException {
        // 创建OSSClient实例。
        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);

        // 上传文件流。
        InputStream inputStream = new FileInputStream(filePath);
        ossClient.putObject(bucketName, fileName, inputStream);

        // 设置URL过期时间为10年  3600l* 1000*24*365*10
        Date expiration = new Date(System.currentTimeMillis() + 3600L * 1000 * 24 * 365 * 10);
        // 生成URL
        URL url = ossClient.generatePresignedUrl(bucketName, fileName, expiration);
        // 关闭OSSClient。
        ossClient.shutdown();
        if (url != null) {

            return url.toString();
        }
        return null;

    }

    public static String upload2AliyunOOS(byte[] bytes, String fileName) {

        // 创建OSSClient实例。
        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);

        // 上传Byte数组。
        ossClient.putObject(bucketName, fileName, new ByteArrayInputStream(bytes));

        // 设置URL过期时间为10年  3600l* 1000*24*365*10
        Date expiration = new Date(System.currentTimeMillis() + 3600L * 1000 * 24 * 365 * 10);
        // 生成URL
        URL url = ossClient.generatePresignedUrl(bucketName, fileName, expiration);
        // 关闭OSSClient。
        ossClient.shutdown();
        if (url != null) {
            return url.toString();
        }
        return null;
    }

    /**
     * 从阿里云删除文件
     */
    public static void deleteAiyunOOS(String fileName) {
        // 创建OSSClient实例。
        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);

        // 删除文件。如需删除文件夹，请将ObjectName设置为对应的文件夹名称。如果文件夹非空，则需要将文件夹下的所有object删除后才能删除该文件夹。
        ossClient.deleteObject(bucketName, fileName);

        // 关闭OSSClient。
        ossClient.shutdown();
    }

    /**
     * 传入文件名，获取URL地址
     *
     * @param fileName
     * @return
     */
    public static String getURL(String fileName) {
        // 创建OSSClient实例。
        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);

        // 设置URL过期时间为10年  3600l* 1000*24*365*10
        Date expiration = new Date(System.currentTimeMillis() + 3600L * 1000 * 24 * 365 * 10);
        // 生成URL
        URL url = ossClient.generatePresignedUrl(bucketName, fileName, expiration);
        if (url == null) {
            return "";
        }
        // 关闭OSSClient。
        ossClient.shutdown();
        return url.toString();

    }

    /**
     * 传入文件名集合，返回url地址集合
     *
     * @param fileNameList
     * @return
     */
    public static List<String> getURL(List<String> fileNameList) {
        // 创建OSSClient实例。
        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);

        // 设置URL过期时间为10年  3600l* 1000*24*365*10
        Date expiration = new Date(System.currentTimeMillis() + 3600L * 1000 * 24 * 365 * 10);

        List<String> list = new ArrayList<>();
        // 生成URL
        for (String fliename : fileNameList) {
            URL url = ossClient.generatePresignedUrl(bucketName, fliename, expiration);
            if (url == null) {
                list.add("");
            }
            list.add(url.toString());
        }
        // 关闭OSSClient。
        ossClient.shutdown();
        return list;

    }

}
